#include <iostream>
#include <string>
#include <pthread.h>
#include <unistd.h>
using namespace std;

#define NUM 3

pthread_cond_t cond;
pthread_mutex_t mutex;

void* handleA(void* args)
{
    while(true)
    {
        cout<<"i am pthreadA"<<endl;
        pthread_cond_signal(&cond);
        sleep(1);
    }
}
void* handleB(void* args)
{
    while(true)
    {
        pthread_cond_wait(&cond,&mutex);
        cout<<"i am pthreadB"<<endl;
    }
}
int main()
{
    pthread_t A;
    pthread_t B;
    pthread_cond_init(&cond, NULL);
    pthread_mutex_init(&mutex, NULL);
    pthread_create(&A,nullptr,handleA,nullptr);
    pthread_create(&B,nullptr,handleB,nullptr);
    pthread_join(A,nullptr);
    pthread_join(B,nullptr);
    pthread_cond_destroy(&cond);
    pthread_mutex_destroy(&mutex);
    return 0;
}
// void* ctrl(void* args)
// {
//     string name = (char*)args;
//     while(true)
//     {
//         cout<<"master say begin work! "<<endl;
//         pthread_cond_signal(&cond);
//         sleep(1);
//     }
// }
// void* work(void* args)
// {
//     while(true)
//     {
//         pthread_cond_wait(&cond, &mutex);
//         cout<<"worker:"<< *(int*)args <<"is work"<<endl;
//     }
//     delete (int*)args;
// }
// int main()
// {
//     pthread_t master;
//     pthread_t worker[NUM];

//     pthread_cond_init(&cond, NULL);
//     pthread_mutex_init(&mutex, NULL);

//     pthread_create(&master,nullptr,ctrl,(void*)"master");
//     for(int i=0;i<NUM;i++)
//     {
//         int* number = new int(i);
//         pthread_create(worker+i,nullptr,work,(void*)number);
//     }
//     for(int i=0;i<NUM;i++)
//     {
//         pthread_join(worker[i],nullptr);
//     }
//     pthread_join(master,nullptr);

//     pthread_mutex_destroy(&mutex);
//     pthread_cond_destroy(&cond);

//     return 0;
// }